package ZengJiHong2.Test3;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @ClassName test3
 * @Author 16799
 * @Date 2025/8/19 20:49
 * @Version 1.0
 * @Description TODO
 *
 *  时间：2025年8月19日22:37:35
 *       这一节，我听课也没有完全听懂，自己单独写依旧是没有思路，需要看答案写
 **/
public class test3 {
    public static void main(String[] args) {
        LocalDate startdate = LocalDate.of(2022,2,3);
        Scanner sc = new Scanner(System.in);
        System.out.println("请您输入要查询的年份和月份，以便为你展示该月休息日（注意：必须是2022-02月开始或之后：）");
        String currenDate = sc.next()+"-01";  //当前日子，假设输入2023-05

        LocalDate endDate = LocalDate.parse(currenDate);

        //备份一下输入的当前输入年月日子的第一天
        LocalDate endMonthFistDate = endDate;
        //拿到当前输入年月的最后一天，例如输入2025-05，拿到5.31
        endDate = endDate.plusMonths(1).minusDays(1);

        //拿到所有的日子对象
        List<day> days = new ArrayList<>();
        while (!startdate.isAfter(endDate)){
            day day = new day(startdate);
            days.add(day);
            startdate = startdate.plusDays(1);
        }
        System.out.println("从2022年2月3日开始到用户目前输入年月的全部日子：");
        System.out.println(days);

        System.out.println("从2022-02月到目前输入年月的历史休息情况如下：");
        //把拿到的所有日子对象进行遍历，然后把符合题目上二休一条件的日子对象flag标记为true
        for (int i = 0; i < days.size(); i+=3) {
            day day = days.get(i);
            day.setFlag(true);
            day.printInfo();
        }

        //初始日期到输入年月的所有休息日就已经找出来了
        System.out.println();

        //展示当月的休息日
        System.out.println(currenDate + "月开始的休息情况如下：");
        List<day> currentDayRest = new ArrayList<>();
        for (int i = 0; i < days.size(); i++) {
            day day = days.get(i);
            if (day.getDate().isBefore(endMonthFistDate)){
                continue;
            }
            currentDayRest.add(day);
            day.printInfo();
        }
        System.out.println();

        //找出属于周末的休息日
        System.out.println("用户当前输入年月： "+currenDate + "这个月周末的休息日如下：");
        currentDayRest.stream().filter(d->{
            return (d.getDate().getDayOfWeek().getValue()==6||
                    d.getDate().getDayOfWeek().getValue()==7)&&
                    d.isFlag();
        }).forEach(d->{
            System.out.println(d);
            if (d.getDate().getDayOfWeek().getValue()==6){
                System.out.println("周六");
            }else {
                System.out.println("周日");
            }
        });



    }
}
